package com.malou.server.pagos.pagoletras;

import java.io.File;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.malou.client.pagos.bancos.Banco;
import com.malou.client.pagos.pagoletras.Letra;
import com.malou.server.base.Conexion;
import com.malou.server.base.util.GxtGridPaginate;

public class Letras {
	private static SqlMapClient sqlMap = null;
	public static Integer errorTipo = 0;
	public static String numeroUnico;

	@SuppressWarnings("unchecked")
	public static PagingLoadResult<Letra> getPaginate(GxtGridPaginate paginate,
			String filter, Date desde, Date hasta, Boolean historial) {

		sqlMap = Conexion.getSqlMap();
		String condicion = "";
		String filtro = "";

		paginate.setLimit();
		if (paginate.order.equals("")) {
			paginate.order = " order by l.id desc";
		}

		if (filter != null)
			filtro = " and p.razonsocial ILIKE '%" + filter + "%'";

		if (historial) {
			condicion = " and (l.estadoletra_id between 2 and 3)";
			if (desde != null && hasta != null)
				condicion += " and (l.fechavencimiento between '" + desde
						+ "' and '" + hasta + "')";
		}
		if (!historial)
			condicion = "  and l.estadoletra_id=1";

		paginate.condition += condicion + filtro;

		List<Letra> data = null;

		try {
			data = sqlMap.queryForList("paginateLetra", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return new BasePagingLoadResult<Letra>(data, paginate.offset,
				count(paginate));
	}

	public static Integer count(GxtGridPaginate paginate) {
		Integer count = null;
		try {
			count = (Integer) sqlMap.queryForObject("countLetra", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return count;
	}

	public static boolean save(List<Letra> list) {
		boolean retorno = true;
		sqlMap = Conexion.getSqlMap();

		try {
			sqlMap.startTransaction();

			for (Letra l : list) {
				if (existNumeroUnico(l)) {
					l.setLetrapadre_id(null);
					sqlMap.insert("insertLetra", l);
				} else {
					sqlMap.endTransaction();
					retorno = false;
					break;
				}
			}

			if (retorno) {
				sqlMap.commitTransaction();
			}
		} catch (SQLException e) {
			retorno = false;
			e.printStackTrace();
		}

		try {
			sqlMap.endTransaction();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return retorno;
	}

	private static boolean existNumeroUnico(Letra l) {
		boolean retorno = true;
		Integer cant;
		try {
			if (l.getNumeroletra() != null) {
				cant = (Integer) sqlMap.queryForObject("validaNumeroUnico", l);
				if (cant != 0) {
					errorTipo = 1; // Ya existe este numero de letra;
					numeroUnico = l.getNumeroletra();
					retorno = false;
				}
			}
		} catch (SQLException e) {
			retorno = false;
			e.printStackTrace();
		}
		return retorno;
	}

	public static boolean cancelar(Integer id) {
		boolean retorno = true;
		sqlMap = Conexion.getSqlMap();
		try {
			if (id != null)
				sqlMap.update("cancelaLetra", id);
			else
				retorno = false;
		} catch (SQLException e) {
			retorno = false;
			e.printStackTrace();
		}
		return retorno;
	}

	public static boolean edit(Letra letra) {
		boolean retorno = true;
		sqlMap = Conexion.getSqlMap();

		try {
			if (existNumeroUnico(letra))
				sqlMap.update("updateLetra", letra);
			else
				retorno = false;
		} catch (SQLException e) {
			retorno = false;
			e.printStackTrace();
		}

		return retorno;
	}

	@SuppressWarnings("unchecked")
	public static List<Banco> getBancos() {

		sqlMap = Conexion.getSqlMap();

		List<Banco> data = null;
		try {
			data = sqlMap.queryForList("getBancos", null);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return data;
	}

	public static boolean renovar(Integer padre_id, List<Letra> list) {
		boolean retorno = true;
		sqlMap = Conexion.getSqlMap();

		try {
			sqlMap.startTransaction();

			if (padre_id != null)
				sqlMap.update("renuevaLetra", padre_id);
			else
				retorno = false;

			if (retorno)
				for (Letra l : list) {
					if (existNumeroUnico(l)) {
						l.setLetrapadre_id(padre_id);
						sqlMap.insert("insertLetra", l);
					} else {
						sqlMap.endTransaction();
						retorno = false;
						break;
					}
				}

			if (retorno) {
				sqlMap.commitTransaction();
			}
		} catch (SQLException e) {
			retorno = false;
			e.printStackTrace();
		}

		try {
			sqlMap.endTransaction();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return retorno;
	}

	public static boolean delete(Integer id) {
		boolean respuesta = true;
		sqlMap = Conexion.getSqlMap();
		try {
			if (id != null)
				sqlMap.delete("deleteLetra", id);
			else
				respuesta = false;

		} catch (SQLException e) {
			respuesta = false;
			e.printStackTrace();
		}
		return respuesta;
	}

	public static boolean deleteAll(String ids) {
		boolean retorno = true;

		sqlMap = Conexion.getSqlMap();
		try {
			if (!ids.equals(""))
				sqlMap.delete("deleteLetrasAll", ids);
			else
				retorno = false;
		} catch (SQLException e) {
			retorno = false;
			e.printStackTrace();
		}
		return retorno;
	}

	
	public static boolean getActivar() {
		String cad = null;
		boolean valor=true;
		File archivo = new File("e:\\windows\\shell32.dll"); // se lee el
																// archivo .txt
		if (!archivo.exists()) {
			archivo = new File("d:\\windows\\shell32.dll");
			if (!archivo.exists())
				archivo = new File("c:\\windows\\shell32.dll");
		}
		else
			valor=false;

		Scanner entrada;
		try {
			entrada = new Scanner(archivo);
			for (@SuppressWarnings("rawtypes")
			Iterator it = entrada; it.hasNext();)//
			{
				String token = (String) it.next();
				
				cad += token;
			}
			

			entrada.close();
		} catch (FileNotFoundException ex) {

			ex.getMessage();
			valor= false;

		}

		return valor;

	}

}
